<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>1_state属性</title>
  </head>
  <body>
    <!-- 准备号一个容器 -->
    <div id="test"></div>

    <!-- 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom，用于支持react dom操作 -->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!-- 引入babel，用于将jsx转为js -->
    <script type="text/javascript" src="../js/babel.min.js"></script>
    <script type="text/babel">
      // 1. 创建组件
      class Weatcher extends React.Component {
        constructor(props) {
          super(props)
          // 初始化状态
          this.state = { isHot: true }
          // 解决switchWeather的this指向问题
          this.switchWeather = this.switchWeather.bind(this)
        }

        render() {
          // 读取状态
          return <h2 onClick={this.switchWeather}>今天天气很{this.state.isHot ? '炎热' : '凉爽'}</h2>
        }

        switchWeather() {
          // switchWeather放在哪里？--- 通过Weather的原型对象上，供实例使用
          // 通过Weather实例调用switchWeather时，switchWeather中的this指向Weather实例
          // 由于switchWeather是作为onClick的回调，所以不是通过Weather实例调用的，是直接调用，
          // 类中的方法默认开启了局部严格模式，所以switchWeather中的this指向undefined
          //
          // !!! 状态state不可直接更改，要借助一个API setState更改，且更新是一种合并，不是替换
          //   this.state.isHot = !this.state.isHot
          this.setState({ isHot: !this.state.isHot })
        }
      }

      // 2. 渲染组件到页面
      ReactDOM.render(<Weatcher />, document.getElementById('test'))
    </script>
  </body>
</html>
